package chenqianghao.rbac.service;

import chenqianghao.rbac.domain.dto.RoleDto;
import chenqianghao.rbac.domain.entity.Role;
import chenqianghao.rbac.domain.vo.RoleVo;
import chenqianghao.rbac.domain.vo.Result;

import java.util.Arrays;

/**
 * 业务层-角色
 *
 * @author 陈蔷好
 * @since 2025/3/12 19:39
 */
public class RoleService {
    public static int DATA_SIZE=100;

    public static Role[] data=new Role[ DATA_SIZE+1];

    public static int idCounter=1;

    public static RoleVo convertToVo(Role role){
        return new RoleVo(role.id,role.name,role.dataScope);
    }
    public static Role createEntity(RoleDto dto,int id){
        Role role=new Role(dto.name,dto.dataScope);
        role.id=id;
        return role;
    }
    public static void updateEntity(RoleDto dto,Role role){
        role.name=dto.name;
        role.dataScope=dto.dataScope;
    }
    public static boolean existsById(int id){
        return id < 1 || id >= idCounter || data[id] == null;
    }

    public  static Role findById (int id) {
        if(existsById(id)) {
            return data[id];
        }
        return null;
    }

    public static Result list(){
        RoleVo[]temp=new RoleVo[DATA_SIZE];
        int length=0;

        for(int i=1;i<idCounter;i++)
        {
            if(data[i]!=null){
                temp[length++]=convertToVo(data[i]);
            }
        }
        return Result.success("查询成功",Arrays.copyOf(temp,length));



    }

    public static Result create(RoleDto dto){
        if(idCounter>DATA_SIZE){
            return Result.failure("创建失败，超出了储存容量");

        }

        Role role=createEntity(dto, idCounter++);
        data[role.id]=role;
        return Result.success("创建成功",null);
    }
    public static Result update(RoleDto dto,int id)
    {
        if(existsById(id)){
            return Result.failure("更新失败，不存在改数据");
        }
        Role role=data[id];
        updateEntity(dto,role);
        return Result.success("更新成功",null);
    }
    public static Result delete(int id){
        if(existsById(id)) {
            return Result.failure("删除失败，不存在改数据");
        }
        if(UserService.roleInUse(id)) {
            return Result.failure("删除失败，还有用户具有该角色，不能删除");
        }
        data[id]=null;
        return Result.success("删除成功",null);


    }
}